package tt.dz.egobus.servicemanager.facade.common;

import com.alibaba.dubbo.config.annotation.Reference;
import tt.dz.egobus.api.ResponseBack;
import tt.dz.egobus.api.commoncenter.bean.ConfigBack;
import tt.dz.egobus.api.commoncenter.bean.ConfigTypeBack;
import tt.dz.egobus.api.commoncenter.bean.SMSBack;
import tt.dz.egobus.api.commoncenter.bean.SMSInformBack;
import tt.dz.egobus.api.commoncenter.service.ConfigApiService;
import tt.dz.egobus.api.commoncenter.service.OperactionConfigApiService;
import tt.dz.egobus.api.commoncenter.service.SMSApiService;
import tt.dz.egobus.servicemanager.facade.interator.Facade;

import java.util.List;

/**
 * @author Anson
 * @date 17-3-20
 * @name
 * @since 1.0.1
 */
@Facade(facadeName = "common")
public class CommonFacade {

    @Reference(version = "1.0.1", timeout = 10000)
    private SMSApiService smsApiService;

    @Reference(version = "1.0.6", timeout = 10000)
    private ConfigApiService configApiService;

    @Reference(version = "1.0.6", timeout = 10000)
    private OperactionConfigApiService operactionConfigApiService;

    public ResponseBack<SMSBack> sendVerifyCode(String mobile, int business) {
        return smsApiService.sendVerifyCode(mobile, business);
    }

    public ResponseBack<SMSBack> verifyNoteVerify(String mobile, int business, String code) {
        return smsApiService.verifyNoteVerify(mobile, business, code);
    }

    public ResponseBack<SMSInformBack> sendInformNote(String mobile, String content, int business) {
        return smsApiService.sendInformNote(mobile, content, business);
    }


    public ResponseBack<SMSInformBack> sendInformNote(String mobile, String content, String businessName) {
        return smsApiService.newSendInformNote(mobile, content, businessName);
    }

    /**
     * 根据key获取相应的配置
     *
     * @param key 路径加惟一key
     * @return 配置信息的值
     * @date 2017-08-14
     * @since 1.0.6
     */
    public ResponseBack<String> getConfig(String key) {
        return configApiService.getConfig(key);
    }

    /**
     * 返回所有配置信息的业务码和业务说明
     * 可以通过业务码来分别获取相应的配置信息列表
     *
     * @return 配置信息所有业务编码和详情
     * @date 2017-08-09
     * @since 1.0.6
     */
    public ResponseBack<List<ConfigTypeBack>> getAllConfigTypeBack() {
        return configApiService.getAllConfigTypeBack();
    }

    /**
     * @param code 业务码
     *             <p>
     *             备注：
     *             1001 服务管理
     *             1002 公共服务
     *             1003 司机服务端
     *             1004 订单中心
     *             1005 用户终端
     *             1006 用户中心
     *             可以直接使用 ConfigType 枚举来赋值
     * @return 配置信息列表
     * @name 根据业务码获取相应的配置信息列表
     * @date 2017-08-09
     * @since 1.0.6
     */
    public ResponseBack<List<ConfigBack>> getSystemConfig(int code) {
        return configApiService.getSystemConfig(code);
    }

    /**
     * 根据业务码和唯一key 获取相关配置信息
     *
     * @param code 业务编码
     *             <p>
     *             备注：
     *             1001 服务管理
     *             1002 公共服务
     *             1003 司机服务端
     *             1004 订单中心
     *             1005 用户终端
     *             1006 用户中心
     *             可以直接使用 ConfigType 枚举来赋值
     * @param key  唯一标识符 key
     * @return 相关的配置信息
     * @date 2017-08-09
     * @since 1.0.6
     */
    public ResponseBack<String> getConfigValue(int code, String key) {
        return configApiService.getConfigValue(code, key);
    }

    /**
     * 根据业务编码和唯一标识符 key
     * 来修改相应的配置信息
     *
     * @param code  业务编码
     *              <p>
     *              备注：
     *              1001 服务管理
     *              1002 公共服务
     *              1003 司机服务端
     *              1004 订单中心
     *              1005 用户终端
     *              1006 用户中心
     *              可以直接使用 ConfigType 枚举来赋值
     * @param key
     * @param value
     * @return
     */
    public ResponseBack<ConfigBack> updateConfigValue(int code, String key, String value) {
        return configApiService.updateConfigValue(code, key, value);
    }

    /**
     * 返回所有配置信息的业务码和业务说明
     * 可以通过业务码来分别获取相应的配置信息列表
     *
     * @return 配置信息所有业务编码和详情
     * @date 2017-08-09
     * @since 1.0.6
     */
    public ResponseBack<List<ConfigTypeBack>> getAllConfigTypeBackOperation() {
        return operactionConfigApiService.getAllConfigTypeBack();
    }

    /**
     * @param code 业务码
     *             <p>
     *             备注：
     *             1001 服务管理
     *             1002 公共服务
     *             1003 司机服务端
     *             1004 订单中心
     *             1005 用户终端
     *             1006 用户中心
     *             可以直接使用 ConfigType 枚举来赋值
     * @return 配置信息列表
     * @name 根据业务码获取相应的配置信息列表
     * @date 2017-08-09
     * @since 1.0.6
     */
    public ResponseBack<List<ConfigBack>> getSystemConfigOperation(int code) {
        return operactionConfigApiService.getSystemConfig(code);
    }

    /**
     * 根据业务码和唯一key 获取相关配置信息
     *
     * @param code 业务编码
     *             <p>
     *             备注：
     *             1001 服务管理
     *             1002 公共服务
     *             1003 司机服务端
     *             1004 订单中心
     *             1005 用户终端
     *             1006 用户中心
     *             可以直接使用 ConfigType 枚举来赋值
     * @param key  唯一标识符 key
     * @return 相关的配置信息
     * @date 2017-08-09
     * @since 1.0.6
     */
    public ResponseBack<String> getConfigValueOperation(int code, String key) {
        return operactionConfigApiService.getConfigValue(code, key);
    }

    /**
     * 根据业务编码和唯一标识符 key
     * 来修改相应的配置信息
     *
     * @param code  业务编码
     *              <p>
     *              备注：
     *              1001 服务管理
     *              1002 公共服务
     *              1003 司机服务端
     *              1004 订单中心
     *              1005 用户终端
     *              1006 用户中心
     *              可以直接使用 ConfigType 枚举来赋值
     * @param key
     * @param value
     * @return
     */
    public ResponseBack<ConfigBack> updateConfigValueOperation(int code, String key, String value) {
        return operactionConfigApiService.updateConfigValue(code, key, value);
    }
}
